import TIM from "../../../../utils/tim-wx"
import utils from "../../../../utils/util.js"
const app = getApp();
Page({
    /**
     * 直播相关监听
     */
    onReady(res) {
        this.ctx = wx.createLivePlayerContext('player'); //
        this.createTim(); //聊天tim
        this.animation = wx.createAnimation(); //动画
    },
    statechange(e) {

        console.log(e)
    },
    error(e) {
        console.log(e)
    },
    /**
     * 页面的初始数据
     */
    data: {
        StatusBar: app.globalData.StatusBar,
        CustomBar: app.globalData.CustomBar,
        Custom: app.globalData.Custom,
        pull_url: '', //直播地址
        avatar: '', //直播头像
        chatMsg: [], //聊天消息
        userMessage: '', //用户输入消息
        roomId: '', //房间id
        roomName: '', //房间名称
        roomCount: '', //房间直播
        showInput: 0, //显示输入框
        pusherHeight: 0, //屏幕高度
        moreLeft: 0, //更多弹窗位置
        hasPraise: false //是否点赞
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        var self = this;
        self.setData({
            roomName: options.roomName,
            roomCount: 0,
            avatar: options.avatar,
            pull_url: decodeURIComponent(options.pull_url),
            roomId: options.roomId,
            pusherHeight: app.globalData.screenHeight
        });
        console.log(self.data)
    },
    /**
     * 创建tim
     */
    createTim: function () {
        let self = this;
        let opts = {
            SDKAppID: 1400314933 // 接入时需要将0替换为您的云通信应用的 SDKAppIDn/；
        };
        let tim = TIM.create(opts); // SDK 实例通常用 tim 表示
        tim.setLogLevel(4); // 普通级别，日志量较多，接入时建议使用    

        tim.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
            event.data.forEach(d => {
                self.getMessage(d)
            });
        });

        self.tim = tim;
        self.loginTap();
    },
    /**
     * 解析消息
     * @param {*} message 
     */
    getMessage: function (message) {
        let self = this;
        if (message.isSystemMessage) { //系统消息则返回
            return;
        }
        switch (message.type) {
            case TIM.TYPES.MSG_TEXT: //文本
                self.renderMessage({
                    ID: message.ID,
                    nick: message.nick,
                    text: message.payload.text
                });
                break;
            case TIM.TYPES.MSG_IMAGE: //图片
                message.payload.imageFormat;
                break;
            case TIM.TYPES.MSG_AUDIO: //音频
                message.payload.url;
                break;
            case TIM.TYPES.MSG_FILE: //文件
                message.payload.fileName;
                break;
            case TIM.TYPES.MSG_GRP_TIP: //提示
                self.getGroupTipNotice(message.payload);
                break;
        }
    },
    /**
     * 群组通知
     * @param {} payload 
     */
    getGroupTipNotice: function (payload) {
        switch (payload.operationType) {
            case TIM.TYPES.GRP_TIP_MBR_JOIN:
                this.getProfile(payload.userIDList);
                return `群成员：${payload.userIDList.join(',')}，加入群组`
            case TIM.TYPES.GRP_TIP_MBR_QUIT:
                return `群成员：${payload.userIDList.join(',')}，退出群组`
            case TIM.TYPES.GRP_TIP_MBR_KICKED_OUT:
                return `群成员：${payload.userIDList.join(',')}，被${payload.operatorID}踢出群组`
            case TIM.TYPES.GRP_TIP_MBR_SET_ADMIN:
                return `群成员：${payload.userIDList.join(',')}，成为管理员`
            case TIM.TYPES.GRP_TIP_MBR_CANCELED_ADMIN:
                return `群成员：${payload.userIDList.join(',')}，被撤销管理员`
            default:
                return '[群提示消息]'
        }
    },
    /**
     * 获取成员信息
     * @param {*} userIdList 
     */
    getProfile: function (userIdList) {
        let self = this;
        // 修改个人标配资料
        self.tim.getUserProfile({
            userIDList: userIdList
        }).then(
            function (imResponse) {
                imResponse.data.forEach((el) => {
                    let id = utils.getGuid();
                    self.renderMessage({
                        ID: "C" + id.substring(1, 31),
                        nick: el.nick,
                        text: '欢迎加入'
                    });
                });
            },
            function (imError) {
                console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
            });
    },
    /**
     * 登录
     */
    loginTap: function () {
        let self = this;
        self.tim.login({
            userID: 'liver',
            userSig: 'eJwtzMsKwjAQheF3mbWUSdJoU3DRggvRhdWi0J2YKGMvhDZqQHx3a*PyfD*cN5TbQ-Q0PaTAI4TZtEmbztGVJm7ol0MYdH22ljSkLEYULFZChGK8pd6MLqXkiBjUUTtZwhRHtVD-F7qNv0Pjj-l65azrk-08qXihT7bt7ptSPnZxUeWGX17kMauzJXy*RGUx3w__'
        }).then(
            function (imResponse) {
                console.log("登录成功"); // 登录成功   
                //必须延迟，否则报错
                setTimeout(() => {
                    self.joinGroupTap();
                }, 500);
            },
            function (imError) {
                console.warn('登录失败的相关信息:', imError); // 登录失败的相关信息
            });
    },
    /**
     * 退出
     */
    logoutTap: function () {
        let self = this;
        let promise = self.data.tim.logout();
        promise.then(function (imResponse) {
            // console.log("登出成功"); // 登出成功
        }).catch(function (imError) {
            // console.warn('logout error:', imError);
        });
    },
    /**
     * 设置昵称
     */
    updateProfile: function () {
        let self = this;
        //性别转换
        var gender = TIM.TYPES.GENDER_MALE;
        if (app.globalData.userInfo.Sex == 2) {
            gender = TIM.TYPES.GENDER_FEMALE;
        }
        // 修改个人标配资料
        self.tim.updateMyProfile({
            nick: app.globalData.userInfo.NickName,
            avatar: app.globalData.userInfo.UserHead,
            gender: gender,
            allowType: TIM.TYPES.ALLOW_TYPE_ALLOW_ANY
        }).then(
            function (imResponse) {
                console.log("更新资料成功"); // 更新资料成功
            },
            function (imError) {
                console.warn('更新资料失败的相关信息', imError); // 更新资料失败的相关信息
            });
    },
    /**
     * 键入群组
     */
    joinGroupTap: function () {
        let self = this;
        self.tim.joinGroup({
            groupID: 'grp',
            type: TIM.TYPES.GRP_AVCHATROOM
        }).then(
            function (imResponse) {
                switch (imResponse.data.status) {
                    case TIM.TYPES.JOIN_STATUS_SUCCESS: // 加群成功
                        self.updateProfile();
                        break;
                    case TIM.TYPES.JOIN_STATUS_ALREADY_IN_GROUP: // 已经在群中
                        break;
                    default:
                        break;
                }
            },
            function (imError) {
                console.warn('joinGroup error:', imError); // 申请加群失败的相关信息
            });
    },
    /**
     * 退出群组
     */
    quitGroupTap: function () {
        let self = this;
        self.tim.quitGroup(self.data.roomId).then(
            function (imResponse) {
                //console.log("退出成功的群" + imResponse.data.groupID); // 退出成功的群 ID
            },
            function (imError) {
                // console.warn('quitGroup error:', imError); // 退出群组失败的相关信息
            });
    },
    /**
     * 发送消息
     */
    sendMessageTap: function () {
        let self = this;
        self.hideInput();

        if (self.data.userMessage.trim().length < 1) return;

        // 发送文本消息，Web 端与小程序端相同
        // 1. 创建消息实例，接口返回的实例可以上屏
        let message = self.tim.createTextMessage({
            to: "grp",
            conversationType: TIM.TYPES.CONV_GROUP,
            payload: {
                text: self.data.userMessage.trim()
            }
        });
        // 2. 发送消息
        self.tim.sendMessage(message).then(
            function (imResponse) {
                // 发送成功
                var ID = utils.getGuid();

                self.renderMessage({
                    ID: "A" + ID.substring(1, 31),
                    nick: app.globalData.userInfo.NickName,
                    text: self.data.userMessage.trim()
                });
            },
            function (imError) {
                // 发送失败
                self.setData({
                    userMessage: ''
                });
                wx.showToast({
                    title: imError.message,
                    icon: "none"
                })
            });
    },
    /**
     * 显示消息
     * @param {*} textArr 
     * @param {*} type 
     */
    renderMessage: function (message) {
        let self = this
        let chatMsg = self.data.chatMsg;
        if (chatMsg.length >= 5) {
            chatMsg.shift();
        }
        chatMsg.push(message);
        self.setData({
            chatMsg: chatMsg,
            userMessage: ''
        });
    },
    /**
     * 绑定输入
     * @param {}} e 
     */
    blurInput: function (e) {
        this.setData({
            userMessage: e.detail.value
        })
    },
    /**
     * 弹出输入框
     */
    tapInput: function () {
        var that = this;
        that.setData({
            showInput: 1
        })
    },
    /**
     * 取消输入框
     */
    hideInput: function () {
        var self = this;
        self.setData({
            showInput: 0
        });
    },
    /**
     * 隐藏dialog
     */
    hideDialog: function () {
        var self = this;
        self.setData({
            showInput: 0
        });
    },
    /**
     * 显示dialog
     */
    tapDialog: function (e) {
        console.log(e)
        var self = this;
        self.setData({
            moreLeft: e.currentTarget.offsetLeft - 20,
            showInput: 2
        });
    },
    /**
     * 心跳动画
     */
    tapPraise: function () {
        let self = this;
        self.animation.scale(1.5).opacity(0).step();
        self.setData({
            animation: self.animation.export()
        });
        setTimeout(function () {
            self.animation.scale(1).opacity(1).step()
            self.setData({
                animation: self.animation.export(),
                hasPraise: true
            })
        }, 400)
    },
    onUnload: function () {
        this.quitGroupTap();
        this.logoutTap();
    }
})